package org.example.inventory.dao;



import org.example.inventory.entity.Sale;

import java.math.BigDecimal;
import java.time.LocalDateTime;
import java.util.List;
import java.util.Map;

public interface SaleDao {

    /**
     * 插入销售记录
     * @param sale 销售记录对象
     * @return 插入后的完整对象（含生成ID）
     */
    Sale insertSale(Sale sale);

    /**
     * 根据ID查询销售记录
     */
    Sale selectSaleById(Integer id);

    /**
     * 更新销售记录
     */
    int updateSale(Sale sale);

    /**
     * 删除销售记录（记录重要操作日志，慎用）
     */
    int deleteSale(Integer id);

    /**
     * 分页查询销售记录（按时间倒序）
     * @param pageNum 页码
     * @param pageSize 每页数量
     */
    List<Sale> selectSalesByPage(int pageNum, int pageSize);

    /**
     * 条件组合查询
     * @param productId 商品ID（可选）
     * @param operatorId 操作员ID（可选）
     * @param startTime 起始时间（可选）
     * @param endTime 结束时间（可选）
     */
    List<Sale> searchSales(
            Integer productId,
            Integer operatorId,
            LocalDateTime startTime,
            LocalDateTime endTime
    );

    /**
     * 统计某商品总销量
     */
    int sumQuantityByProductId(Integer productId);

    /**
     * 统计某时间段内的销售额
     */
    BigDecimal sumRevenue(LocalDateTime start, LocalDateTime end);

    /**
     * 按操作员统计销售数量
     */
    Map<Integer, Integer> countSalesByOperator();
}

